deadlock & starvation

교착상태(Deadlock)와 기아상태(Starvation)
교착상태(Deadlock)
무한 대기 상태: 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태
서로 lock.acquire에 걸리면 무한 교착상태에 빠지게 된다.
참고)
교착상태 발생 조건
다음 네 가지 조건이 모두 성립될 때, 교착상태 발생 가능성이 있다.
1. 상호배제(Mutual exclusion): 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.
2. 정대기(Hold and wait): 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
3. 비선점(No preemption): 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
4. 순환대기(Circular wait): 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

교착상태 해결 방법
1. 교착상태 예방
2. 교착상태 회피
3. 교착상태 발견
4. 교착상태 회복

교착상태 발견(deadlock detection)과 회복
교착상태 발견(deadlock detection)
    교착상태가 발생했는지 점검하여 교착 상태에 있는 프로세스와 자원을 발견하는 것
교착상태 회복(deadlock recovery)
    교착 상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것
기아상태(starvation)
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태
교착 상태와 기아상태
    교착상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생
    기아상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원이 할당이 안되는 경우를 주로 의미

기아상태 해결방안
우선순위 변경
    프로세스의 운선순위를 수시로 변경하여, 각 프로세스가 높은 우선순위를 가질 기회 제공
    오래 기다린 프로세스의 우선순위를 높여주기
    우선순위가 아닌, 요청 순서대로 처리하는 FIFO 기반의 요청큐 사용